$.fn.extend({
	uploader : function(opts) {
		return this.each(function() {
			var $this = $(this);
			var $this_id = $this.attr('id');
			var $wrap = $this.closest('.jdc-uploader');

			var $list_selector = '.uploader-list';
			var limit = $this.attr('data-limit') || 1;
			var $formData = $this.attr('form-data') || '{}';
			var $server = $this.attr('server') || '/platform/function/uploadImgTemp.do';

			// 初始化Web Uploader
			var uploader = WebUploader.create({

				// 选完文件后，是否自动上传。
				auto : true,

				// swf文件路径
				swf : '/theme/admin/plugins/webuploader/Uploader.swf',

				// 文件接收服务端。
				server : $server,

				// 选择文件的按钮。可选。
				// 内部根据当前运行是创建，可能是input元素，也可能是flash.
				pick : $this,

				// 只允许选择图片文件。
				accept : opts.accept,
				compress : false,
				fileNumLimit : 10,
				fileSingleSizeLimit : opts.fileSingleSizeLimit || 1 * 1024 * 1024,
				formData : JSON.parse($formData)
			// 1 M
			});

			uploader.on('error', function(code) {
				switch (code) {
					case 'F_EXCEED_SIZE':
						toastr.error('文件大小超出');
						break;
					case 'interrupt':
						toastr.error('上传暂停');
						break;
					case 'Q_EXCEED_NUM_LIMIT':
						toastr.error('数量超出');
						break;
					default:
						toastr.error('上传失败，请重试' + code);
						break;
				}
			});

			uploader.on("beforeFileQueued", function(a) {
				$list = $($list_selector, $wrap);
				if ($list.children().size() >= limit) {
					toastr.error("最多只能上传" + limit + "张图片")
					return false
				}
			}),

			// 当有文件添加进来的时候
			uploader.on('fileQueued', function(file) {
				var $li = $('<div id="' + file.id + '" class="file-item thumbnail">' + '<img>' + '<div class="info">' + file.name + '</div>' + '</div>'), $img = $li.find('img');
				$btns = $('<div class="file-panel remove-this"><span class="cancel" data-id="">x</span></div>').appendTo($li), $btns.on('click', 'span', function() {
					var _id = $(this).attr('data-id');
					uploader.removeFile(file);
					$(this).closest('.file-item').remove();
				});

				// $list为容器jQuery实例
				$list = $($list_selector, $wrap);
				$list.append($li);

				if (file.getStatus() === 'invalid') {
					showError(file.statusText);
				} else {
					// 创建缩略图
					// 如果为非图片文件，可以不用调用此方法。
					// thumbnailWidth x thumbnailHeight 为 100 x 100
					uploader.makeThumb(file, function(error, src) {
						if (error) {
							//$img.replaceWith('<span>不能预览</span>');
							$img.attr('src', '/theme/admin/images/file.jpg');
							$img.width(100);
							return;
						}

						//$img.attr('src', src);
					}, 100, 100);
				}

			});

			// 文件上传过程中创建进度条实时显示。
			uploader.on('uploadProgress', function(file, percentage) {
				var $li = $('#' + file.id), $percent = $li.find('.progress span');

				// 避免重复创建
				if (!$percent.length) {
					$percent = $('<p class="progress"><span></span></p>').appendTo($li).find('span');
				}

				$percent.css('width', percentage * 100 + '%');
			});

			// 文件上传成功，给item添加成功class, 用样式标记上传成功。
			uploader.on('uploadSuccess', function(file, response) {
				if(response.err){
					toastr.error(response.err);
					return;
				}
				$('#' + file.id).find('span.cancel').attr('data-id', response.id);
				$('#' + file.id).append('<input type="hidden" name="#name#" value="#value#"/>'.replaceAll('#name#', $this_id).replaceAll('#value#', response.path));
				$('#' + file.id).find('img').attr('src', '/' + response.path);

				$('#' + file.id).addClass('upload-state-done');
			});

			// 文件上传失败，显示上传出错。
			uploader.on('uploadError', function(file) {
				var $li = $('#' + file.id), $error = $li.find('div.error');

				// 避免重复创建
				if (!$error.length) {
					$error = $('<div class="error"></div>').appendTo($li);
				}

				toastr.error('上传失败');
			});

			// 完成上传完了，成功或者失败，先删除进度条。
			uploader.on('uploadComplete', function(file) {
				$('#' + file.id).find('.progress').remove();
			});

			$('.file-panel.remove-this', $wrap).on('click', 'span', function() {
				$(this).closest('.file-item').remove();

			});
		})
	},
	uploaderXls : function() {
		return this.each(function() {
			var $this = $(this);
			var $this_id = $this.attr('id');
			var $wrap = $this.closest('.jdc-uploader');

			var $list_selector = '.uploader-list';
			var limit = $this.attr('data-limit') || 1;

			// 初始化Web Uploader
			var uploader = WebUploader.create({

				// 选完文件后，是否自动上传。
				auto : true,

				// swf文件路径
				swf : '/theme/admin/plugins/webuploader/Uploader.swf',

				// 文件接收服务端。
				server : '/platform/function/uploadImgTemp.do',

				// 选择文件的按钮。可选。
				// 内部根据当前运行是创建，可能是input元素，也可能是flash.
				pick : $this,

				// 只允许选择图片文件。
				accept : {
					title : 'excel',
					extensions : 'xls,xlsx',
					mimeTypes : 'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
				},
				compress : false,
				fileNumLimit : 10,
				fileSingleSizeLimit : 1 * 1024 * 1024
			// 1 M
			});

			uploader.on('error', function(code) {
				switch (code) {
					case 'F_EXCEED_SIZE':
						toastr.error('文件大小超出');
						break;
					case 'interrupt':
						toastr.error('上传暂停');
						break;
					case 'Q_EXCEED_NUM_LIMIT':
						toastr.error('数量超出');
						break;
					default:
						toastr.error('上传失败，请重试' + code);
						break;
				}
			});

			uploader.on("beforeFileQueued", function(a) {
				$list = $($list_selector, $wrap);
				if ($list.children().size() >= limit) {
					toastr.error("最多只能上传" + limit + "个文件")
					return false
				}
			}),

			// 当有文件添加进来的时候
			uploader.on('fileQueued', function(file) {
				var $li = $('<div id="' + file.id + '" class="file-item">' + '<h4 class="info">' + file.name + '</h4>'  + '</div>');
				$btns = $('<div class="file-panel remove-this"><span class="cancel" data-id="">删除</span></div>').appendTo($li), $btns.on('click', 'span', function() {
					var _id = $(this).attr('data-id');
					uploader.removeFile(file);
					$(this).closest('.file-item').remove();
				});

				// $list为容器jQuery实例
				$list = $($list_selector, $wrap);
				$list.append($li);

				if (file.getStatus() === 'invalid') {
					showError(file.statusText);
				} else {

				}
			});

			// 文件上传过程中创建进度条实时显示。
			uploader.on('uploadProgress', function(file, percentage) {
				var $li = $('#' + file.id), $percent = $li.find('.progress span');

				// 避免重复创建
				if (!$percent.length) {
					$percent = $('<p class="progress"><span></span></p>').appendTo($li).find('span');
				}

				$percent.css('width', percentage * 100 + '%');
			});

			// 文件上传成功，给item添加成功class, 用样式标记上传成功。
			uploader.on('uploadSuccess', function(file, response) {
				$('#' + file.id).find('span.cancel').attr('data-id', response.id);
				$('#' + file.id).append('<input type="hidden" name="#name#" value="#value#"/>'.replaceAll('#name#', $this_id).replaceAll('#value#', response.path));

				$('#' + file.id).addClass('upload-state-done');
			});

			// 文件上传失败，显示上传出错。
			uploader.on('uploadError', function(file) {
				var $li = $('#' + file.id), $error = $li.find('div.error');

				// 避免重复创建
				if (!$error.length) {
					$error = $('<div class="error"></div>').appendTo($li);
				}

				toastr.error('上传失败');
			});

			// 完成上传完了，成功或者失败，先删除进度条。
			uploader.on('uploadComplete', function(file) {
				$('#' + file.id).find('.progress').remove();
			});

			$('.file-panel', $wrap).on('click', 'span', function() {
				$(this).closest('.file-item').remove();

			});
		})
	}
});

$(document).ready(function() {

})